// 包含必要的ESP32系统头文件
#include <esp_log.h>
#include <esp_err.h>
#include <nvs.h>
#include <nvs_flash.h>
#include <driver/gpio.h>
#include <esp_event.h>

// 包含项目自定义头文件
#include "application.h"
#include "system_info.h"

// 定义日志标签
#define TAG "main"

// ESP32应用程序入口函数
extern "C" void app_main(void)
{
    // 初始化默认事件循环，用于处理系统事件
    ESP_ERROR_CHECK(esp_event_loop_create_default());

    // 初始化NVS（非易失性存储）用于WiFi配置存储
    esp_err_t ret = nvs_flash_init();
    // 如果NVS分区损坏或版本不匹配，则擦除并重新初始化
    if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
        ESP_LOGW(TAG, "Erasing NVS flash to fix corruption");
        ESP_ERROR_CHECK(nvs_flash_erase());
        ret = nvs_flash_init();
    }
    ESP_ERROR_CHECK(ret);

    // 启动应用程序主实例
    Application::GetInstance().Start();
    // 主线程将退出并释放栈内存
}
